﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Services;
using Business;
using Entity;

namespace WebService
{
    /// <summary>
    /// Ce WebService fourni toutes les méthodes business relatives aux amis 
    /// nécessaires pour développer un client.
    /// </summary>
    [WebService(Namespace = "http://tempuri.org/")]
    [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
    [System.ComponentModel.ToolboxItem(false)]
    // Pour autoriser l'appel de ce service Web depuis un script à l'aide d'ASP.NET AJAX, supprimez les marques de commentaire de la ligne suivante. 
    // [System.Web.Script.Services.ScriptService]
    public class AmisWS : System.Web.Services.WebService
    {

        /// <summary>
        /// Ajoute une demande d'ajout d'amis en provenance de iddemandeur pour idreceveur.
        /// </summary>
        /// <param name="iddemandeur">L'utilisateur à l'origine de la demande</param>
        /// <param name="idreceveur">L'utilisateur faisant l'objet de la demande</param>
        [WebMethod]
        public void demandeAmitie(int iddemandeur, int idreceveur)
        {
            AmisService.demandeAmitie(iddemandeur, idreceveur);
        }

        /// <summary>
        /// Confirmation de demande d'ajout en provenance de iddemandeur par idreceveur.
        /// </summary>
        /// <param name="idreceveur">L'utilisateur ayant confirmé la demande</param>
        /// <param name="iddemandeur">L'utilisateur à l'origine de la demande</param>
        /// </param>
        [WebMethod]
        public void confirmerDemande(int iddemandeur, int idreceveur)
        {
            AmisService.confirmerDemande(iddemandeur, idreceveur);
        }

        /// <summary>
        /// Refus de la demande d'ajout en provenance de iddemandeur par idreceveur.
        /// </summary>
        /// <param name="idreceveur">L'utilisateur ayant ignoré la demande</param>
        /// <param name="iddemandeur">L'utilisateur à l'origine de la demande</param>
        /// </param>
        [WebMethod]
        public void ignorerDemande(int iddemandeur, int idreceveur)
        {
            AmisService.ignorerDemande(iddemandeur, idreceveur);
        }

        /// <summary>
        /// Met fin à une relation d'amitié entre deux utilisateurs.
        /// </summary>
        /// <param name="idutilisateur">L'utilisateur à la source de la fin de la relation</param>
        /// <param name="idamis">L'autre utilisateur de la relation</param>
        [WebMethod]
        public void supprimerAmitie(int idutilisateur, int idamis)
        {
            AmisService.supprimerAmitie(idutilisateur, idamis);
        }

        /// <summary>
        /// Retourne, si elle existe, la relation d'amitié entre les deux utilisateurs.
        /// </summary>
        /// <param name="idutilisateur">L'utilisateur source de la relation</param>
        /// <param name="idamis">L'utilisateur cible de la relation</param>
        /// <returns>La relation d'amitié, ou null si elle n'existe pas</returns>
        [WebMethod]
        public AmitieUtilisateurEWS getAmitie(int idutilisateur, int idamis)
        {
            AmitieUtilisateur amitieUtilisateur = AmisService.getAmitie(idutilisateur, idamis);
            if (amitieUtilisateur != null)
                return new AmitieUtilisateurEWS(amitieUtilisateur);
            else
                return null;
        }

        /// <summary>
        /// Retourne tous les amis d'un utilisateur donné.
        /// </summary>
        /// <param name="idutilisateur">L'utilisateur dont on veut connaitre les amis</param>
        /// <returns>La liste des amis de l'utilisateur, ou null si aucune amitié</returns>
        [WebMethod]
        public List<AmitieUtilisateurEWS> getAmities(int idutilisateur)
        {
            List<AmitieUtilisateurEWS> listAmitieUtilisateurEWS = new List<AmitieUtilisateurEWS>();
            List<AmitieUtilisateur> listAmitieUtilisateur = AmisService.getAmities(idutilisateur);
            if (listAmitieUtilisateur != null)
            {
                foreach (AmitieUtilisateur amitieUtilisateur in listAmitieUtilisateur)
                    listAmitieUtilisateurEWS.Add(new AmitieUtilisateurEWS(amitieUtilisateur));

                return listAmitieUtilisateurEWS;
            }
            else
            {
                return null;
            }
        }

        /// <summary>
        /// Retourne toutes les demandes d'ajout d'un utilisateur donné.
        /// </summary>
        /// <param name="idutilisateur">L'utilisateur dont on veut connaitre les demandes</param>
        /// <returns>La liste des demandes d'ajout de l'utilisateur, ou null si aucune demande</returns>
        [WebMethod]
        public List<AmitieUtilisateurEWS> getDemandeAjout(int idutilisateur)
        {
            List<AmitieUtilisateurEWS> listAmitieUtilisateurEWS = new List<AmitieUtilisateurEWS>();
            List<AmitieUtilisateur> listAmitieUtilisateur = AmisService.getDemandeAjout(idutilisateur);
            if (listAmitieUtilisateur != null)
            {
                foreach (AmitieUtilisateur amitieUtilisateur in listAmitieUtilisateur)
                    listAmitieUtilisateurEWS.Add(new AmitieUtilisateurEWS(amitieUtilisateur));

                return listAmitieUtilisateurEWS;
            }
            else
            {
                return null;
            }
        }
    }
}
